import { compileToFunction } from './compile/index'
import { initGlobApi } from './globalApi/index'
import { initMixin } from './init'
import { stateMixin } from './initState'
import { lifecycleMixin } from './lifecycle'
import {  renderMixin } from './vnode/index'
import { createEl, patch } from './vnode/patch'

function Vue(options) {
    //  初始化,调用原型上的_init方法
    this._init(options)
}
// 执行该方法后，_init挂载到原型上
initMixin(Vue)

// 初始化生命周期
lifecycleMixin(Vue)

// 添加_render
renderMixin(Vue)

stateMixin(Vue) // 添加$nextTick()方法

// 全局方法 Vue.Veemixin Vue.component Vue.extend
initGlobApi(Vue)

// let vm1 =  new Vue({data:{myname:'名字'}})

// let render1 = compileToFunction(`<div id="a" style="color:red">
// <ul>
// <li key="b">b</li>
// <li key="a">a</li>
// <li key="c">c</li>
// <li key="d">d</li>
// </ul>
// </div>`)
// let vnode1 = render1.call(vm1)
// document.body.appendChild(createEl(vnode1))

// let vm2 =  new Vue({data:{myname:'名字1'}})
// let render2 = compileToFunction(`<div id="b" style="color:blue">
// <ul>
// <li key="a">a</li>
// <li key="b">b</li>
// <li key="c">c</li>
// </ul>
// </div>`)
// let vnode2 = render2.call(vm2)

// setTimeout(() => {
//     patch(vnode1,vnode2)
// }, 1000);
export default Vue;
